<?php

namespace App\Http\Controllers\commodity;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
<<<<<<< HEAD
=======

>>>>>>> b1990139fd74a207cbbfdc7c165186e9f38d0e5d
use App\Http\Controllers\goods\GoodsController;


class GoodsConfigController extends Controller
{
    /**
<<<<<<< HEAD
     * Info() 获取分类名称并用|----拼接好并进行分类排序
=======
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function getIndex()
    {
        $data = DB::table('goods_config')
        -> join('goods','goods_config.id','=','goods_config.goods_id')
        -> join('goods_config_cup','goods_config_cup.id','=','goods_config.goods_config_cup')
        -> select('goods.*','goods_config_cup.*')
        -> get();
        dd($data);
    }


     /* Info() 获取分类名称并用|----拼接好并进行分类排序
>>>>>>> b1990139fd74a207cbbfdc7c165186e9f38d0e5d
     * 
     * @param   $length int 分类路径中逗号的数量
     * @param   $data array 分类数组
     * 
     * @return  返回拼接好的分类名称数组
     */
    static public function Info()
    {
        // 查询数据库中的分类名称,并根据分类排序
        $data = DB::table('goods_config_cate') -> select(DB::raw("*,concat(goods_config_path,',',id) as paths"))-> orderBy('paths') -> get();
        // 遍历数组进行查询数据库中数据
        foreach($data as $key=>$value){
            // 根据分类路径中的逗号数量
            $length = substr_count($value['goods_config_path'],',');
            // 根据逗号数量进行分类名的拼接,通过|----来拼接显示级别
            $data[$key]['goods_config_cate'] = str_repeat('|----',$length).$value['goods_config_cate'];
        }
        return $data;
    }

    /**
     * $getConfig()     获取商品配置信息的静态方法
     * @param   $arr array 存储商品配置信息的多维数组
     * @param   $data 数据库中存储的初始化数据
     * @return  return $arr   返回储存商品配置信息多维数组
     */
    static public function getConfig($goods_config_sort)
    {
        $data = DB::table('goods_config_cate') -> where('goods_config_sort',$goods_config_sort) -> get();
        $arr = array();
        foreach($data as $key=>$value) {
            $value['sub'] = self::getConfig($value['id']);
            $arr[] = $value;
        }
        return $arr;
    }
    
    /**
     * getList() 商品列表显示
     *
     * @return 返回商品分类列表视图
     */
    public function getList()
    { 
       
        

        //商品分类列表视图
        return view('admin.goodsConfig.list',['data'=>self::Info()]);
    }

    /**
     * getList() 添加分类商品
     *
     * 
     * 
     * @return 返回商品添加分类视图,并返回给视图$data数据
     */
    public function getAdd()
    {
        
        // 商品添加分类视图
        $id = $_GET['id'];
        return view('admin.goodsConfig.add',['data'=>self::Info(),'id'=>$id]);
    }

     /**
     * getInsert() 执行添加分类商品
     *
     * @param   $data array 用户提交信息
     * 
     * @return void
     */
    public function postInsert(Request $request)
    {
        // 获取用户提交信息,并去除掉_token
        $data = $request -> except(['_token']);
        // dd($data);
        // 处理商品分类路径,如果是顶级分类的话(0),那么分类路径就为0
        if($data['goods_config_sort'] == 0){
            $data['goods_config_path'] = 0;
        }else{
            // 如果不是顶级分类的话,那么分类路径就为:数据库中相对分类下的路径+用户提交的商品分类id
            $path = DB::table('goods_config_cate') -> where('id',$data['goods_config_sort']) -> first();
            // 拼接路径
            $data['goods_config_path'] = $path['goods_config_path'].','.$data['goods_config_sort'];
        }
        // 将用户提交信息添加到数据库
        $res = DB::table('goods_config_cate') -> insert($data);
        // 判断是否成功插入数据库
        if($res > 0){
            // 如果插入数据成功则跳转到分类列表页
            return redirect('admin/commodity/config/list') -> with('success','插入数据成功');
        }else{
            // 如果插入数据失败则返回添加分类页面
            return back() -> widthInput() -> with('error','插入数据失败');
        }
    }

    /**
     * getDelete()  删除用户指定分类
     * 
     * @param  $id int 用户指定删除分类的id
     * @param  $res array 分类列表下存在子分类的数组
     * @return 返回到分类列表
     */
    public function getDelete(Request $request)
    {
        // 接收用户所要删除分类的id
        $id = $request -> only('id');
        $id = $request -> only('id');
        $id = $id['id'];
        // 查询数据库获取分类信息并判断此分类下是否还有子分类
        $res = DB::table('goods_config_cate') -> whereIn('goods_config_sort',$id) -> get();
        if($res){
            // 此分类下有子分类,提示用户不允许删除
            return back() -> with('error','此分类下有子分类,请先删除子分类!');
        }else{
            // 删除分类
            DB::table('goods_config_cate') -> whereIn('id',$id) -> delete();
            // 此分类下没有子分类,提示删除成功
            return redirect('/admin/commodity/config/list') -> with('success','删除成功');
        }
    }

    /**
     * getEdit()    修改商品配置分类信息
     *   
     * @return 返回修改商品配置分类视图
     */
    public function getEdit()
    {
        // 获取要修改商品配置分类的id
        $id = $_GET['id'];
        // 获取要修改商品配置分类的分类名称
        $info = DB::table('goods_config_cate') -> where('id',$id) -> first();


        return view('admin.goodsConfig.edit',['data'=>self::Info(),'id'=>$id,'info'=>$info]);
    }


    /**
     *  postUpdate()    修改商品配置分类信息    
     *  
     *  @param      $path array 根据父级路径查询到修改的父类路径与数据库中父类路径相等的数据,进行路径拼接使用
     *  @param      $data  已经组装好的要修改信息的数值  
     *  
     *  @return     void  如果修改成功则返回商品配置分类视图,如果失败则返回修改视图
     */
    function postUpdate(Request $request)
    {
        // 数组中去除不需要插入数据库的值
        $data = $request -> except('_token','id');
        // 获取要修改的商品配置分类的id
        $id = $request -> only('id')['id'];

        // 获取父类路径
        $path = DB::table('goods_config_cate') -> where('id',$data['goods_config_sort']) -> first();

        // 处理路径
        if($data['goods_config_sort'] == 0) {
            // 如果没有选择商品配置分类的上级id,那么就是顶级分类,路径就为0 
            $data['goods_config_path'] = 0;
        }else{
            // 如果选择了父级分类,那么就进行拼接路径
            $data['goods_config_path'] = $path['goods_config_path'].','.$request -> only('goods_config_sort')['goods_config_sort'];
        }
        // 进行数据库修改
        $res = DB::table('goods_config_cate') -> where('id',$id) -> update($data);
        // 判断是否修改成功,如果成功则返回到商品配置分类列表页,如果失败则返回到修改页面
        if($res && $res > 0) {
            return redirect('admin/commodity/config/list') -> with('success','修改商品配置分类成功');
        }else{
            return back() -> withInput() -> with('error','修改商品配置分类失败');
        }
    }


}
